<?php
	class Page_getjson extends V_View {
		function worklist () {
            // Фильтрация и разбивка на страницы
            $page_current=V_DB::escape($_POST['page']);
            $on_page_count=V_DB::escape($_POST['rows']);
            $page_offset=$page_current*$on_page_count-$on_page_count;
            $list_state=V_DB::escape($_POST['list_state']);
            $sort_date=V_DB::escape($_POST['sort_date']);
            $sort_date_type=V_DB::escape($_POST['sort_date_type']);
            $sort_order=V_DB::escape($_POST['sidx']);
            $sort_direction=V_DB::escape($_POST['sord']);
            if (isset($_POST['full_view'])) $full_view=V_DB::escape($_POST['full_view']);
            if (isset($_POST['list_is_my'])) $list_is_my=V_DB::escape($_POST['list_is_my']);
            if (isset($_POST['list_sign'])) $list_sign=V_DB::escape($_POST['list_sign']);
            if (isset($_POST['list_send'])) $list_send=V_DB::escape($_POST['list_send']);
            if (isset($_POST['list_status'])) $list_status=V_DB::escape($_POST['list_status']);
            if (isset($_POST['user_work_id'])) $user_work_id=V_DB::escape($_POST['user_work_id']);
            if (isset($_POST['user_add_id'])) $user_add_id=V_DB::escape($_POST['user_add_id']);
            if (isset($_POST['service_is_my'])) $service_is_my=V_DB::escape($_POST['service_is_my']);
            if (isset($_POST['filt_company'])) $filt_company=V_DB::escape($_POST['filt_company']);
            if (isset($_POST['filt_phone'])) $filt_phone=V_DB::escape($_POST['filt_phone']);
            $q_at=' AND ';
            $q_ar=', ';
            $where='WHERE 1=1';
            $select=' ';
            $join=' ';
            $order=' ';
            
            // Удалить сразу как появится возможность работы с политикой безопасности!!!
            if (V_User::getId()==21) {
            	$list_sign=0;
            	$list_is_my='true';
            }
            // !!!!!!!!----------------------------------
            
            // Формирование запроса - дата
            if ($sort_date and trim($sort_date)!='') {
            	if ($sort_date=='today') $sort_date="CURDATE()";
            	else $sort_date='"'.$sort_date.'"';
            	switch ($sort_date_type) {
            		case 0: $where.=$q_at."DATE_FORMAT(st.state_date,'%Y-%m-%d')=".$sort_date." ";break;
            		case 1: $where.=$q_at."DATE_FORMAT(wl.list_add_date,'%Y-%m-%d')=".$sort_date." ";break;
            		case 2: $where.=$q_at."DATE_FORMAT(wl.list_edit_date,'%Y-%m-%d')=".$sort_date." ";break;
            	}
            }
            // Формирование запроса - тип даты
            switch ($sort_date_type) {
            	case 0: $select.=$q_ar."DATE_FORMAT(st.state_date,'%d-%m-%y') AS list_date ";break;
            	case 1: $select.=$q_ar."DATE_FORMAT(wl.list_add_date,'%d-%m-%y') AS list_date ";break;
            	case 2: $select.=$q_ar."DATE_FORMAT(wl.list_edit_date,'%d-%m-%y') AS list_date ";break;
            }
            // Формирование запроса - состояние
			switch ($list_state) {
            	case 0: $where.=$q_at.'st.state_id='.$list_state.' '; break;
            	case 1: $where.=$q_at.'st.state_id='.$list_state.' '; break;
            	case 2: $where.=$q_at.'st.state_id='.$list_state.' '; break;
            }
			// Формирование запроса - город
            if (V_User::getGroup()!=0 or V_User::getCity()!=0) {
            	$where.=$q_at.'wl.client_city_id='.V_User::getCity().' ';
            }
			// Формирование запроса - подписан/не подписан
			if (isset($list_sign))
			switch ($list_sign) {
            	case 0: $where.=$q_at.'wl.list_is_sign='.$list_sign.' '; break;
            	case 1: $where.=$q_at.'wl.list_is_sign='.$list_sign.' '; break;
            }
			// Формирование запроса - отправлен/не отправлен
			if (isset($list_send))
			switch ($list_send) {
            	case 0: $where.=$q_at.'wl.user_add_issend='.$list_send.' '; break;
            	case 1: $where.=$q_at.'wl.user_add_issend='.$list_send.' '; break;
            }
			// Формирование запроса - принят/не принят
			if (isset($list_status))
			switch ($list_status) {
            	case 0: $where.=$q_at.'wl.user_work_isget='.$list_status.' '; break;
            	case 1: $where.=$q_at.'wl.user_work_isget='.$list_status.' '; break;
            }
            // Формирование запроса - мои рабочие листы
            if (isset($list_is_my) and $list_is_my=='true')
            	$where.=$q_at.'(wl.user_work_id='.V_User::getId().' OR wl.user_add_id='.V_User::getId().') ';
            // Формирование запроса - фильтр
            if (isset ($filt_company))
            	$where.=$q_at.'wl.client_company_name LIKE "'.$filt_company.'%" ';
            if (isset ($filt_phone))
            	$where.=$q_at.'ph.phone LIKE "'.$filt_phone.'%" ';
            // Формирование запроса - пользователь, добавивший лист
            if (isset ($user_add_id))
            	$where.=$q_at.'wl.user_add_id='.$user_add_id.' ';
            // Формирование запроса - пользователь, работающий с листом
            if (isset ($user_work_id))
            	$where.=$q_at.'wl.user_work_id='.$user_work_id.' ';
            // Формирование запроса - только пользовательские сервисы
            if (isset($service_is_my) and $service_is_my=='true' and V_User::getGroup()==2 and V_User::getService()!=0) {
            	$service_is_my=true;
            	$where.=$q_at.'sr.service_id='.V_User::getService().' ';
            	$join.='LEFT JOIN v_work_list_services AS sr ON wl.id=sr.list_id ';
            	$select.=$q_ar.'sr.service_state_id ';
            } else $service_is_my=false;
            // Формирование запроса - сортировка
            if ($sort_order and trim($sort_order)!='') 
            	switch ($sort_order) {
            		case 'id'			: $order.='ORDER BY wl.id '; break;
            		case 'company_name'	: $order.='ORDER BY wl.client_company_name '; break;
            		case 'list_is_sign'	: $order.='ORDER BY wl.list_is_sign '; break;
            		case 'list_date'			: 
            			switch ($sort_date_type) {
            				case 0: $order.='ORDER BY st.state_date '; break;
            				case 1: $order.='ORDER BY wl.list_add_date '; break;
            				case 2: $order.='ORDER BY wl.list_edit_date '; break;
            			}; break;
            		case 'client_state'	: $order.='ORDER BY st.state_id '; break;
            	}
            // Формирование запроса - направление сортировки
            if ($sort_direction and trim($sort_direction)!='' and $sort_direction=='desc') $order.='DESC ';
            // Создание списка рабочих листов
            $result=V_DB::fetchAll(
				'SELECT wl.id FROM v_work_list AS wl '.
				'LEFT JOIN v_work_list_states AS st ON wl.id=st.list_id '.
            	'LEFT JOIN v_work_list_phones AS ph ON wl.id=ph.list_id '.
            	'LEFT JOIN v_work_list_contacts AS cn ON wl.id=cn.list_id '.
            	$join.$where.' GROUP BY ph.list_id, cn.list_id '
            );
            $list_count = sizeof ($result)+1;
            $rows = V_DB::fetchAll(
            	'SELECT wl.id, wl.user_add_id, wl.client_company_name, wl.list_is_sign, '.
            	'wl.user_add_issend, wl.user_work_isget, ph.phone, cn.contact_name, sl.state, '.
            	'wl.client_city_id, wl.user_work_id '.
            	$select.' FROM v_work_list AS wl '.$join.
            	'LEFT JOIN v_work_list_states AS st ON wl.id=st.list_id '.
            	'LEFT JOIN v_state_list AS sl ON st.state_id=sl.id '.
            	'LEFT JOIN v_work_list_phones AS ph ON wl.id=ph.list_id '.
            	'LEFT JOIN v_work_list_contacts AS cn ON wl.id=cn.list_id '.
            	$where.' GROUP BY ph.list_id, cn.list_id '.
            	$order.'LIMIT '.$page_offset.','.$on_page_count
            );
            // Получение количества листов
            $page_count=ceil($list_count / $on_page_count);
            // Construct the json data
			$response->page = $page_current; // current page
			$response->total = $page_count; // total pages
			$response->records = $list_count; // total records
			$i=0;
            if (!empty($rows)) foreach ($rows as $row) {
            	$response->rows[$i]['id']=$row['id']; //id 
    			if ($row['list_is_sign']==1) $row['list_sign']='Подписан'; else $row['list_sign']='Не подписан';
    			
            	$act='<a href="'.V_Router::url('worklist','edit',$row['id']).'">изменить</a> ';
            	if (V_User::getGroup()==0 and (V_User::getCity()==0 or V_User::getCity()==$row['client_city_id']))
            		$act.='<a href="#" onclick="worklist.del('.$row['id'].')">удалить</a> ';
                if ($row['user_add_issend']==0 and ($row['user_add_id']==V_User::getId() 
                	or (V_User::getGroup()==0 and (V_User::getCity()==0 or V_User::getCity()==$row['client_city_id']))))
                    $act.='<a href="#" onclick="worklist.send('.$row['id'].')">отправить</a> ';
                if ($row['user_work_isget']==0 and $row['user_add_issend']==1 and V_User::getGroup()!=2)
                    $act.='<a href="#" onclick="worklist.work('.$row['id'].','.V_User::getId().')">принять</a> ';
                if ($row['user_work_isget']==1 and $row['user_work_id']==V_User::getId())
                    $act.='<a href="#" onclick="worklist.unwork('.$row['id'].')">отказаться</a> ';
                    
            	$check='<input type="checkbox" class="list_check" value="'.$row['id'].'" />';
                    
                $company='<a href="'.V_Router::url('worklist','edit',$row['id']).'" style="border:none">'.
                			$row['client_company_name'].'</a> ';
                if ($service_is_my and $row['service_state_id']!=0)
                	 $row['state']='<span style="text-decoration:line-through">'.$row['state'].'</span>';
                if (isset($full_view) and $full_view=='true') {
    				$response->rows[$i]['cell']=array(
    					$check, $row['list_date'], $company,$row['contact_name'],
    					$row['phone'],$row['list_sign'],$row['state'], $act
    				);
    				$i++;
				} else {
					$response->rows[$i]['cell']=array(
    					$company,$row['contact_name'],$row['phone']
    				);
    				$i++;
				}
			}
			echo json_encode($response);
        }
        function jobs () {
            // Фильтрация и разбивка на страницы
            $page_current=V_DB::escape($_POST['page']);
            $on_page_count=V_DB::escape($_POST['rows']);
            $page_offset=$page_current*$on_page_count-$on_page_count;
            $sort_order=V_DB::escape($_POST['sidx']);
            $sort_direction=V_DB::escape($_POST['sord']);
            if (isset($_POST['job_is_my'])) $job_is_my=V_DB::escape($_POST['job_is_my']);
            if (isset($_POST['job_is_app'])) $job_is_app=V_DB::escape($_POST['job_is_app']);
            if (isset($_POST['job_is_get'])) $job_is_get=V_DB::escape($_POST['job_is_get']);
            if ($sort_direction and trim($sort_direction)!='' and $sort_direction=='desc') $sort_direction='DESC ';
            else $sort_direction=' ';
            // Если надо показать только выполненные задания
            if (isset($job_is_app) and $job_is_app=='true')
            	$q_job_app='WHERE work_isapp=1 ';
            else $q_job_app='WHERE work_isapp=0 ';
            // Если надо показать только принятые задания
            if (isset($job_is_get) and $job_is_get=='true')
            	$q_job_get='AND target_isget=1 ';
            else $q_job_get='AND target_isget=0 ';
            // Если надо показать только задания пользователя
            if (isset($job_is_my) and $job_is_my=='true')
            	$q_job_my='AND work_user_id='.V_User::getId().' ';
            else $q_job_my=' ';
            // Создание списка рабочих листов
            $result=V_DB::fetchAll(
            	'SELECT id FROM v_job_list '.$q_job_app.$q_job_get.$q_job_my.
            	'AND (target_group_id=0 OR target_group_id='.(V_User::getGroup()+1).') '.
            	'ORDER BY '.$sort_order.$sort_direction
            );
            $list_count = sizeof ($result)+1;
            $rows = V_DB::fetchAll(
            	'SELECT id, message, target_group_id, target_isget, work_isapp '.
            	'FROM v_job_list '.$q_job_app.$q_job_get.$q_job_my.
            	'AND (target_group_id=0 OR target_group_id='.(V_User::getGroup()+1).')'.
				'ORDER BY '.$sort_order.$sort_direction.' '.
            	'LIMIT '.$page_offset.','.$on_page_count
            );
            // Получение количества листов
            $page_count=ceil($list_count / $on_page_count);
            // Construct the json data
			$response->page = $page_current; // current page
			$response->total = $page_count; // total pages
			$response->records = $list_count; // total records
			$i=0;
			if (!empty($rows)) foreach ($rows as $row) {
    			$response->rows[$i]['id']=$row['id']; //id
    			if ($row['target_isget']==0)
    				$act='<a href="#" onclick="worklist.getwork('.$row['id'].')">принять</a> ';
    			elseif ($row['work_isapp']==0) 
    				$act='<a href="#" onclick="worklist.appwork('.$row['id'].')">выполнено</a> ';
    			else 
    				$act='<a href="#" onclick="worklist.delwork('.$row['id'].')">удалить</a> ';
    			//Получение рабочих листов, связанных с заданием
    			$res=V_DB::query('SELECT list_id FROM v_job_list_items WHERE job_id='.$row['id']);
    			if (isset($res) and V_DB::num_rows($res)>0) { 
    				while($item = mysql_fetch_array($res))
    				$t_list[]='<a target="_blank" href="'.V_Router::url('worklist','edit',$item['list_id']).'">'.
    							$item['list_id'].'</a>';
    				if (!empty($t_list)) $list=implode(', ',$t_list);
    				else $list='';
    			} else $list='';
    			unset ($t_list);
    			$response->rows[$i]['cell']=array(
    				$row['message'],$list,$act
    			);
    			$i++;
			}
			echo json_encode($response);
        }
		function users () {
            // Фильтрация и разбивка на страницы
            $page_current=V_DB::escape($_POST['page']);
            $on_page_count=V_DB::escape($_POST['rows']);
            $page_offset=$page_current*$on_page_count-$on_page_count;
            $sort_order=V_DB::escape($_POST['sidx']);
            $sort_direction=V_DB::escape($_POST['sord']);
            if ($sort_direction and trim($sort_direction)!='' and $sort_direction=='desc') $sort_direction=' DESC ';
            else $sort_direction=' ';
            // Создание списка рабочих листов
            $result=V_DB::fetchAll('SELECT id FROM v_user_list ORDER BY '.$sort_order.$sort_direction);
            $list_count = sizeof ($result)+1;
            $rows = V_DB::fetchAll(
            	'SELECT us.id, us.login, us.name, us.group_id, gr.group_name, ct.city, '.
            	'us.user_city_id '.
            	'FROM v_user_list AS us '.
            	'LEFT JOIN v_user_groups AS gr ON us.group_id=gr.id '.
            	'LEFT JOIN v_work_list_city AS ct ON us.user_city_id=ct.id '.
				'ORDER BY '.$sort_order.$sort_direction.' '.
            	'LIMIT '.$page_offset.','.$on_page_count
            );
            // Получение количества листов
            $page_count=ceil($list_count / $on_page_count);
            // Construct the json data
			$response->page = $page_current; // current page
			$response->total = $page_count; // total pages
			$response->records = $list_count; // total records
			$i=0;
			if (!empty($rows)) foreach ($rows as $row) {
    			$response->rows[$i]['id']=$row['id']; //id
    			
            	$act='<a href="'.V_Router::url('users','show',$row['id']).'">просмотр</a> ';
            	if (V_User::getGroup()==0 and 
            			(V_User::getCity()==0 or 
            				(V_User::getCity()==$row['user_city_id'] and $row['group_id']!=0)
            			)
            		)
            	{
                	$act.='<a href="'.V_Router::url('users','edit',$row['id']).'">изменить</a> ';
                	if (V_User::getId()!=$row['id'])
                    	$act.='<a href="#" onclick="userlist.del('.$row['id'].')">удалить</a> ';
            	}
    			$response->rows[$i]['cell']=array(
    				$row['id'],$row['login'],$row['name'],$row['group_name'],$row['city'],$act
    			);
    			$i++;
			}
			echo json_encode($response);
        }
        function message () {
        	$user = new V_User();
            // Фильтрация и разбивка на страницы
            $page_current=1;//V_DB::escape($_POST['page']);
            $on_page_count=10;//V_DB::escape($_POST['rows']);
            $page_offset=$page_current*$on_page_count-$on_page_count;
            $sort_order='id';//V_DB::escape($_POST['sidx']);
            $sort_direction='';//V_DB::escape($_POST['sord']);
            if ($sort_direction and trim($sort_direction)!='' and $sort_direction=='desc') $sort_direction=' DESC ';
            else $sort_direction=' ';
            // Создание списка рабочих листов
            $result=V_DB::query('SELECT id FROM v_message_list '.
            					'WHERE target_user_id='.V_User::getId().' AND is_del_target=0 '.
        						'OR send_user_id='.V_User::getId().' AND is_del_send=0 '.
            					'ORDER BY '.$sort_order.$sort_direction);
            $list_count = V_DB::num_rows($result);
            $result=V_DB::query('SELECT us.name, us.login, ms.message, ms.target_user_id, ms.id FROM v_message_list AS ms '.
        						'LEFT JOIN v_user_list AS us ON ms.send_user_id=us.id '.
        						'WHERE ms.target_user_id='.V_User::getId().' AND ms.is_del_target=0 '.
        						'OR ms.send_user_id='.V_User::getId().' AND ms.is_del_send=0 '.
        						'ORDER BY '.$sort_order.$sort_direction.' '.
           						'LIMIT '.$page_offset.','.$on_page_count);
            // Получение количества листов
            $page_count=ceil($list_count / $on_page_count);
            // Construct the json data
			$response->page = $page_current; // current page
			$response->total = $page_count; // total pages
			$response->records = $list_count; // total records
			$i=0;
        	// Получение сообщений
            if ($result) while($row = mysql_fetch_array($result)) {
    			$response->rows[$i]['id']=$row['id']; //id
    			if ($row['target_user_id']==V_User::getId()) 
    				$row['author']='<span style="color:#blue">→ '.$row['name'].'</span>';
            	else 
            		$row['author']='<span style="color:#blue">←  '.$row['name'].'</span>';
            	$act='<a href="#" onclick="messages.messageShow('.$row['id'].')">прочитать</a> ';
    			$act.='<a href="#" onclick="messages.del('.$row['id'].')">удалить</a> ';
    			$act.='<a href="#" onclick="messages.reply(\''.$row['login'].'\')">ответить</a> ';
            		
    			$response->rows[$i]['cell']=array(
    				$row['id'],$row['author'],$row['message'],$act
    			);
    			$i++;
			}
			echo json_encode($response);
        }
}